﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using SushiSOAPServices.Persistencia;
using SushiSOAPServices.Dominio;
using System.ServiceModel.Web;
using SushiSOAPServices.Exceptions;
using System.Net;

namespace SushiSOAPServices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "Pedidos" en el código, en svc y en el archivo de configuración a la vez.
    public class Pedidos : IPedidos
    {
        private PedidoDAO pedidoDAO = null;
        private PedidoDAO PedidoDAO
        {
            get
            {
                if (pedidoDAO == null)
                    pedidoDAO = new PedidoDAO();
                return pedidoDAO;
            }
        }
        private DetallePedidoDAO detallepedidoDAO = null;
        private DetallePedidoDAO DetallePedidoDAO
        {
            get
            {
                if (detallepedidoDAO == null)
                    detallepedidoDAO = new DetallePedidoDAO();
                return detallepedidoDAO;
            }
        }

        
        public Pedido CrearPedido(Pedido pedido, List<DetallePedido> detalle)
        {

            int newID = PedidoDAO.obtenerNuevoId();
            pedido.NroPedido = newID.ToString().PadLeft(10,'0');

            Pedido pedidoPendiente = PedidoDAO.obtenerPedidoPorClienteyEstado(pedido.IdCliente, pedido.Estado);

            if (pedidoPendiente != null)
            {

                PedidoException ex = new PedidoException { Message = "No puede realizar otro pedido porque existe un pedido " + pedidoPendiente.NroPedido + " en estado Pendiente" };
                throw new FaultException<PedidoException>(ex, ex.Message);
            }

            if (detalle.Count() > 5)
            {

                PedidoException ex = new PedidoException { Message = "El número de productos solicitados excede del número de productos permitidos por pedido" };
                throw new FaultException<PedidoException>(ex, ex.Message);
            
            }

            foreach (DetallePedido item in detalle)
            {
                item.IdPedido = newID;
                DetallePedidoDAO.Crear(item);
            }

            pedido.IdPedido = newID;

            return PedidoDAO.Crear(pedido);

        }
    }
}
